home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
BBS Toolkit
/
BBS Toolkit.iso
/
doors_2
/
twview93.zip
/
DOCS.TXT
< prev
next >
Wrap
Text File
|
1992-06-18
|
32KB
|
601 lines
Documentation (heh!) for the Trade Wars Viewer programs -- DOS version
Last revision: 6/7/92 by Woody
Abstract:
---------
The game Trade Wars is a delightful mix of economic strategy, exploration, and
military conquest. For the first two to succeed, however, requires a good
working knowledge of the universe. Unfortunately, keeping all the information
about which sectors you've visited, which are ports, and which is connected to
which can become a nightmare. The two main programs, "Convert" and "Examine"
should help to make keeping that information straight a little easier, and
increase your enjoyment of the game.
The first program, "Convert," creates a data base of explored sectors, warps
for each sector, if it is a port or not, and if a port, what it is selling.
It is able to use the "interrogation" mode of your Crai, to enable fairly
rapid and simple collection of data about the universe.
The second, "Examine," allows you to look at that data base in a variety of
ways, from visual graphing of the data to asking questions about nearby ports
and so on.
A third, "Offline," performs various inquiry tasks.
What you need to run the programs:
----------------------------------
To create the data base, you need to be in a terminal program that allows
ASCII uploads and ASCII captures. The best situation is one that allows you
to do them simultaneously, i.e., capture input while uploading a file.
Second best is to have a large scrollback buffer, that allows you to take
pieces out of the scrollback and append them to a file.
I've compiled two versions of the programs, one for DOS machines and another
for Macs. (Source code is included in the TWVIEW package.) A port has been
made to the amiga: look for a file TWVIEWxx.LHA. If you are running the DOS
version, you will need the device driver (.BGI files) suitable for your
machine. These files should simply reside in the default directory.
HOW TO CREATE AND MAINTAIN THE ORIGINAL DATA BASE:
--------------------------------------------------
There are two methods to develop the data base. Which you use depends on (i)
how good you are at flinging files about and (ii) how much new information you
are trying to collect. If you just want to find out about a few sectors, use
the "old" method. If you want to collect a full set of data, use the "new"
computer interrogation mode.
In both modes, you should should turn ANSI off at least for the duration of
the transfer. Do this with <N> from the main computer menu.
The "Old" method.
-----------------
First, log into the game, and invoke the ship's computer. Tell the computer
you want the known universe report, by hitting K. Now start an ASCII capture.
If you have explored more than half the universe, tell the computer that you
want unexplored sectors by hitting U and return. The computer will list your
unexplored sectors. If you have explored less than half, tell the computer
you want explored sectors by hitting E and return. The computer will list
your known sectors. If you've explored a lot of sectors, there may be a
[PAUSE] in the listing; just hit the space bar and go on past it. (Its okay
if it shows up in your ASCII download.) When the listing is finished, turn
off the capture. Your captured file must contain either the line that says
"You have explored the following sectors:" or "You have NOT explored the
following sectors:" and at least one blank line after the sectors. (A little
more before or after is okay too.)
Now shift from your terminal program to the program "Convert". At the first
prompt, it is asking for your initial data base. If you've already developed
a data base, and are just updating it, give the name of your old base; if you
don't have an existing data base, just hit a return. Next, it will ask if it
should be reading a list of explored sectors, a log of inter-warp and port
information, and so on. Choose option 1. Next, it'll ask for your "Explored
Sectors" or "Unexplored Sectors" file. Next, it will ask you to name the file
to generate: use anything you like here but being careful to not accidentally
overwrite something you want to keep. (The program is smart enough to ask if
you really mean to clobber a file.) The last question the program will ask
you is if you want an update on your ports: this will add a request for update
for every port. The program maintains information about current trading levels
for each known in the game; this will freshen that information to the current
data. It probably isn't needed very often, but once in a while to update
things it is useful. (I generally use that only if I've lots of time to play
around: I refresh "interesting" ports by using an upload from the "Examine"
program.)
What this step will do is create a file that you can upload to generate lots
of printouts. Essentially, what it creates is a file with I<sector number>
and R<sector number> for every new sector. The nice thing is that this will
interface well with the Crai on board your ship.
Now back to Tradewars. You are probably still in Computer mode; if not, get
there. What you want to do is upload the contents of the file you just
generated with the Convert program into the Crai on your ship. If you can
do that while doing an ASCII capture, start the capture and then start the
upload. Otherwise, you may have to start the upload and then retrieve the
results later from your scrollback buffer. In any case, your captured file
should contain all the I reports (sector nnn has warps to : xxx - yyy - zzz
etc) and all the R reports (Commerce report for ...). There will be lots of
"I have no record of a port in that sector."'s: that's okay -- have to find
out if there is a port there or not. If there are a couple of ports that
you are trying to keep track of, you can also call up a port report on them
and store that in the downloaded file: just make sure that when you hit your
R you don't just carriage return but explicitly type in the sector number.
Back to the "Convert" program. Again, tell the program your old data file
(or hit return to start fresh) and this time we are in part 2. Tell it the
name of the ascii download or capture you just made, and the name you want to
use for your database. The program will generate the data base.
The "New" method.
-----------------
I should mention at this point that there is a collection of utilities,
TWUTILxx, one of which will automatically gather the two .SCT and .PRT files
described below. The collection also includes some routines that this
program does not do -- in particular, it includes routines to make good
guesses as to the location of the stardock and class 0 ports even though you
have not done any exploration. I have not used these programs, but the
documentation is clear and well written (unlike this, sorry) and so you
might want to check them out.
First you have to get into computer interrogation mode of your Crai. To do
this, you need to send ASCII characters 200 through 205 to the Crai. There
is a file "ON.TXT" included in this package -- do an ASCII upload of ON.TXT
after you have activated the Crai, and you will see a ":" appear.
Alternatively, if you are on an IBM, you can hold down the Alt key, then
type 200, release, hold down alt, type 201, release, etc.
Now that you are in interrogation mode, start your ASCII capture; I recommend
using an extension of .SCT. Type I, and the computer will immediately begin
spewing out sector numbers and warps. When that finishes, stop the capture,
and start another capture, this time using an extention of .PRT. Type R, and
the computer will begin spewing out port information. When that finishes,
stop that capture, shell to DOS, and run the program "Convert."
There are two new options in convert: option 8, which parses the .SCT report
you prepared, and option 9 which parses the .PRT report. Invoke them, then
exit Convert and your data base is complete.
This "new" method does not identify class 0 ports (Terra, for one), nor does
it identify the star dock (as the old method did from logs). That information
is not available from interrogation mode, so you have to add them manually by
using the edit mode of "Convert."
OTHER CONVERT OPTIONS
---------------------
This takes care of 1 & 2 (old style sector/port info processing) and 8 & 9
(new style sector/port info processing). For to have the program remember
where you have left fighters, capture a <G> report from the main menu
(remember, with ANSI turned off) and then feed that through option 3.
For the Major Space Lanes data (those sectors that get cleared by the Feds
each night) I have a problem. It turns out that the Martin's haven't used
any of the standard shortest path algorithms in their program. (Amateurs,
sigh..) So we have to get the Crai to do the shortest path computation.
To do the computation, you have to know the location of the stardock, and
the two other ports that sell fighters and shields other than Terra. Option
4 will generate an upload file, that option 5 will then parse.
Many people have reported problems getting the upload file to work properly.
There are two solutions: either fiddle with your ascii upload so that it
doesn't send out more characters until the computer finishes working with
the previous set, or just enter the file generated in #4 by hand yourself.
Its a fairly small file to type.
Option 6 allows fellow teammates to collaborate. You can feed in their
information about sectors, ports, and so on, and use it for yourself. Of
course, ports that you haven't visited will be marked as "blocked" next time
you do a port scan (since you aren't receiving info from them) but you will
be able to see what kind of port they are, and approximately how much they
are selling.
Option 7 allows direct editing. This is important if, for example, you've
been using the "New" method only, and you know where the ports that sell
Holds, Fighters, and Shields are; if you know the location of the Stardock;
if someone in the game destroys a port you've visited (and you want to mark
that as empty space again); if you create a port; and a new feature to 0.91,
if you want to mark a sector as to be avoided (so TWVIEW won't plot a path
across that sector or show paths from it on the display). Just choose 7 and
follow the prompts.
STRUCTURE OF THE DATA BASE
--------------------------
The database is in plain text, so you can examine it yourself if you like.
Information is divided into several categories. First, are the two lines:
::Tradewars Data file::
SpaceDock is 200
or whatever the corresponding sector is if you have visited the space dock,
or possibly "SpaceDock is 0" if you have not visited it or do not know the
location of the space dock sector.
Next is a line of the form:
7 <- number of notes
where the integer represents how many "Notes" you've stored for the game.
A note has the form:
13 Don't Go Near This Sector!!!!
i.e., a sector number, and a short bit of text. You can add or delete notes
from within the "Examine" program, as well as display those sectors for which
you've recorded notes.
Next is a line of the form:
105 <- number of Port Infos
followed by lines of the form:
120 3000 3280 -2530 100 32 100 -60 270 -1024
where the first integer is the sector number for the port; next are the levels
for the three trade goods "Fuel Ore," "Organics," and "Equipment." A positive
number means that the port is selling the stuff, and a negative number means
the port is buying up to that much of the stuff. (Remember that the larger
the magnitude of the number, the better the price you get -- ports are more
willing to stretch when the numbers are higher!) The next three numbers are
percentages of maximum use: a value of 100 means the port is fully refreshed
for that good, 0 means they are all sold out or are not interested in buying
anything.
Special Note: If a port doesn't show up on the R report, but there had been
port information stored for it, the previous sales levels are preserved, but
the port usages are all set to zero. This allows you to identify ports that
have been captured by the Ferrengi or opposing players.
Finally, the last three numbers show the absolute change in goods since the
previous port update. These numbers are used in the <C>hanges report; they
are good for locating where someone has negotiated a planetary contract, for
example.
The sectors are in no special order (actually, in order of appearance from the
logs over time) but there must be as many lines as specified in the "<- number
of Port Infos."
Next is a line of the form:
Sector data starts here ...
followed by lines of the form:
1 6 2 3 4 5 6 7 8 2
<sector> <number of warps> <warp1> ... <warpn> <port code> <etc code>
Here, for example, is a report for sector 1: it has six warps, to positions 2
through 7, a port code of 8 (which actually corresponds to class 0) and an
"etc" code of 2. A "Port Code" corresponds to -1, if the sector is not a
port, 0 through 7 based upon a three bit representation of selling or buying
(for example, sector 120 is selling Ore and Organics and buying Equipment, so
its port code would be 1 * 1 + 1 * 2 + 0 * 4 = 3; don't worry about it, the
program handles figuring out port codes and so on). The "etc" code tells
about various pieces of information, again depending on bit representation.
Currently the codes in use are:
NoteExists = 1;
IsPort = 2;
HasFighters= 4;
SpaceLane = 8;
Avoid = 16;
Stardock = 128;
but others will probably follow. (Note that the Stardock is also a port; so
its etc code is 128 + 2 = 130; if a random port had a note attached, its code
would be 2 + 1 = 3.)
HOW TO USE THE DATA BASE VIEWER
-------------------------------
Its pretty well impossible to draw a decent map with all 1000 sectors, so the
data base viewer doesn't try to do that. Run "Examine", and tell it the name
of your data base. You will be presented with a list of options. In version
0.92, you get to choose from the following list:
Choose one of:
<A>dd note
<B>usiest ports
<C>lassify ports
<D>elete note
<E>vil pair [SxS & xxB]
Closest place to buy <F>ighters, shields, and holds
Note <I>nformation
<L>ength of path between two sectors
<M>isc config options
<N>earest port
<P>aired ports
<Q>uit
Nearest <S>ectors
<T>ranswarp menu
Nearest <U>nexplored sectors
<V>iew space in graphic format
<W>here is nearest fighter cloud
Net change <X>
<Y>ou asked for non-adjacent trading pairs?
Here is what the commands will do:
<A>dd note
<D>elete note
Note <I>nformation
These manage the notes that you may have stored on your universe. Typical
notes might be "enemy base here!", "great trading spot", "Fedspace", or
whatever. Option "A" will add a note to a sector, option "D" will delete a
note from a sector, and option "I" will present you with a list of the notes
you've made, sorted by distance from a current sector.
<B>usiest ports
This will offer a display of your ports, sorted by usage. First to be listed
will be all class 0 ports and all ports with a usage field of 0. (In
particular, any port that has been previously scanned, but for which you can
not now obtain a scan will appear here.) Then will occur all ports sorted by
fraction of maximum use.
<C>lassify ports
Want to know where all the BBB ports are? This is the command for you. It
will list all known ports of a specific class. Choose the class from the
menu, and you get the regular port listing.
<E>vil pair
This idea comes from the TWUTIL package. Suppose you are an evil player and
want to do the trade/steal routine. What do you want? You need to
transwarp to someplace where you can pick up some equipment, then move
someplace where you can sell the equipment to do the trade/steal cycle. You
would probably continue this until you get busted: you then want to go to
someplace to pick up ore so you can transwarp to some a class 0 port to get
replacement holds. So, what this routine identifies is a port that sells
ore and equipment, close to a port that buys equipment.
Closest place to buy <F>ighters, shields, and holds
Invoke this option, and you will be asked for your current sector. The
computer will then display the path from that sector to any place it knows of
to buy fighters: if the only class 0 port you know is Terra, that is the only
one it will display, but if you know of the others, it will display a shortest
path to the closest of those sectors, or the Stardock.
<L>ength & path between two sectors
You specify two sectors, and it will tell you the shortest way it knows of to
get between those two sectors. Note that this may NOT be the actual shortest
path if there are sectors you have not yet explored that might give you a
better route. It gives you the shortest path YOU'VE EXPLORED between those
two sectors. It will not route your path across an avoid. The program will
actually list the path in both directions, with a pause (for a return) in
between.
<M>isc config options
Currently, there are two allowed configuration options. You can turn the
color off: this prints everything in monochrome, and changes port colors to
small printouts of the actual ports. It looks good on my laptop... your
mileage may vary. (Suggestions?) Anyway, if you load GRAPHICS.COM, this
allows you to print the screen and still see port sector numbers. The other
option is for verbose or terse sector descriptors. In verbose mode, it will
print "Fighters", "Space Lane", "Dead End", "Avoid", etc. In terse mode, it
will print "F", "SL", "DE", "AV" and so shouldn't overflow the line.
<N>earest port
Nearest <S>ectors
Nearest <U>nexplored sectors
These displays will give you information about what is close to your current
position. Information displayed includes if the sector has been explored, any
notes, if its a port, its status (SSB for example, means selling Ore, selling
Organics, and buying Equipment) and levels of production. If you ask for the
"Nearest Port" report, only ports are listed. I find the "Nearest Unexplored
sectors" report VERY useful for exploration purposes: I can just head toward
the nearest unexplored sector easily this way.
<P>aired ports
This is one of my favorites. What it does is go through the data base and
find ports that are adjacent (i.e. you can warp between them using normal
space in one turn) and are compatible (i.e. at port A you can buy a good
that is sold at port B, and you can sell a good that is bought at port B).
You can be selective (greedy) and only specify ports that are compatible in
the very profitable Organic-Equipment trade, or ask for all compatible pairs.
The program will offer you the opportunity to have the results sent to a text
file, which you can print later (if you can't run the program simultaneously
with your terminal emulator, you can get hard copy of the "hot sectors") and
you can have the results sent to a text file that are compatible for upload
(i.e. part 2 of the "Convert" program so you can keep an eye on trading levels
at these critical ports). Displayed to the screen is an integer "factor" --
this number is based upon levels of goods available in the critical trades,
and will give a rough estimate of how good a deal you are going to get.
<T>ranswarp menu
This drops down to a submenu that deals with locations of deployed fighters
and using a transwarp drive. Most submenu items are pretty obvious: you
specify where you have deployed fighters, or tell the data base that some
#%!%@$ has shot up your deployed fighters, or list the places the data base
knows you've deployed your fighters. The only thing that needs mentioning
is the shortest route submenu item: you specify where you are, and where you
want to go. It figures out, based upon where your fighters are located, the
fastest route to get there (using a transwarp jump and then normal autopilot).
It may say to transwarp to your current sector -- that just means the shortest
route lies through normal space. Another thing interesting is that with
Transwarp, the equivalent of "paired ports" are ports that you can hop
between buying a little fuel ore for the engines and still trade
organics/equipment. Best is SBS & SSB: you can buy just enough fuel to make
it to the other port. Alternatively, you can buy enough fuel for a round
trip: best is then SSB & BBS (so you sell as much equipment as possible)
although SBS & BSB is also profitable.
<V>iew space in graphic format
Viewing the data will attempt a graphic display on your screen of space: you
tell it about how many rows across and columns up and down of sectors to use
(maximums are given in the program: hit a return, and you get a default value
that is about 3/4 of maximum); you tell it the base sector you want in the
center of the screen (it has to be a sector you've visited!); and you tell it
how large a radius to display (all sectors it is aware of no more than that
distance away from your base sector). It will try to display the collection
of warps that make up your known space. Ordinary, visited sectors are shown
as circles, ports as rectangles. (Unexplored sectors just have their numbers
floating in space, and if you have color are in yellow.) Lines connecting
sectors means there is a warp connecting one with the other. Dashed lines
mean that you don't know if the warp is two way or not: if one end of the line
connects to an unexplored sector, you will have a dashed line. If both of the
sectors at each end are explored, the warp really is one way! (Try graphing
around the StarDock and around the class 0 ports.) Don't try to graph too
many sectors at once: the screen gets too busy, and you won't be able to tell
what connects to what.
<Y>ou asked for non-adjacent trading pairs?
Some people had observed that my program worked too well: in their games
they couldn't find any paired ports at which to trade. They wanted "almost
adjacent" ports. Well, I can't really believe these things are going to be
profitable (can't you just spend time hauling colonists until the ports
regenerate?) but hey, if they really want to spend the turns...
Use of the OFFLINE program
--------------------------
The OFFLINE program is envisioned as something you use while not logged into
the game, to decide upon strategy and the like. Version 0.92 gives the
following menu:
<C>ontrolled sector status
<D>ead end analysis
suggest <E>therprobe targets
visit <M>ultiple sectors efficiently
<O>ne way warps
<Q>uit
<S>tellar dispersion
<T>raffic area analysis
<U>known sectors
<V>isit every sector
The <C>ontrolled sector status display is useful to look for backdoors or
sectors that you have missed in setting out a domain. Essentially, you
specify militarized sectors that mark the perimeter of your domain, and then
a sector that is "inside". It runs through the area you can get to without
running a militarized gauntlet. If it finds an opening out into the major
space lanes, there is a problem...
The <D>ead end analysis provides you with the dispersion of the dead ends by
tunnel length. A tunnel is a sequence of sectors adjacent to only two
sectors, the last of which is a dead end. These are convenient places to
place your citadels, as you can fortify the citadel and make someone fire
off lots of photon torpedos or fight through lots of defenses to get to your
home sector. After displaying the dispersion, it asks for a tunnel length,
and then will display all tunnels of that length. It checks for "back
door"s, i.e. one way warps into your tunnel, then displays the distance of
the home sector from terra.
suggest <E>therprobe targets and <V>isit every sector efficiently are two
commands that you might use in the endgame. Lets assume you have already
mapped all the sectors and are just looking for where your opponents have
built up their citadels. What these allow is building up of a "map" of
sectors you have recently visited/scanned recently, so you can tell where
your opponents are hiding. The former will make a suggestion to sectors
that will show lots of new sectors for you, and the last will actually offer
a circular path through the galaxy that will allow you to visit or scan
every possible sector. (Incidentally, a galactic tour, from scratch, takes
about 1000 moves. A scout can easily do that in a week. If you use up a
bunch of etherprobes, you can do it in a long (and expensive) day.)
visit <M>ultiple sectors efficiently is intended to provide the following:
you know that you want to hit sectors A, B, C, D, and are going to go through
normal space -- the program will suggest which is the best order to visit
the sectors. You can specify if you want to return to your original
starting point, or just end at one of the targets. (This allows you to make
long chains, if you want to hit thirty or fourty ports.)
<O>ne way warps gives you a listing of known one-way warps. Not terribly
useful at the moment, but it is interesting, eh?
<S>tellar dispersion will provide the dispersion of sectors from a given
sector. This will give you a general feel for whether a sector is near the
middle of the galaxy (lots of sectors at distance 3, 4, 5, 6) or on the rim
of the galaxy (lots of sectors at distance 11, 12, 13, 14). Useful,
somewhat, in deciding where to hide citadels or place threatening fighter
clouds.
<T>raffic area analysis will take a long time to compute... but when it
finishes, it will determine via connectivity what the most likely sector to
find a trader is. Basically, it runs through all million paths between
pairs of sectors, weights the path by its ends (in "uniform" weights, the
weight is 1; in "port heavy" weights, the weights are
Port Type Weight
blank sector 0
BBB, SSS 1
SBB, BSS 2
BSB, BBS 4
SSB, SBS 4
HFS 10
Terra 20
space.dock 50
The number that comes out is the number of paths through that given sector,
with paths weighted as above. High numbers are good places to put
fighter/mine blockades; or small numbers of fighters to collect tolls or
just track the trader traveling through the sector.
Generally, when you are in a reasonably established game, a turn is worth a
lot more than 3,000 credits, so you use etherprobes to explore. How do you
best use the etherprobes? Well, you can spend a lot of time with the
Crai... or you can use the <U>known sectors list. These will be sectors
that you don't have attached to any sector you've encountered. If they are
connected to the universe at all (the universe generation has a bug in that
there can be sectors that you can't warp into; the only way to find this is
to turn all avoids off, and ask for the shortest path to that sector --
don't try to use an etherprobe targeted at that sector, it will just waste
the etherprobe) and you fire an etherprobe at it, you will pick up at least
two sectors. I find that once I'm at 70% or so, this list will be
sufficiently small that I can use the crai just on these sectors, and use up
some etherprobes efficiently.
FINIS
-----
The program is compiled under Turbo Pascal 6.0 by Borland Inc. (Borland is
a trademark. People always seem to mention trademarks, so I guess I better.)
It doesn't use much more than Standard Pascal, except for file handling and
IO. Originally, this was developed on a Mac (also Turbo Pascal, version 1.1
I think) but around version 0.86 I switched to working on an IBM laptop.
[The name of my laptop is "Flowers of Evil". I'm rather fond of Zelazny's
work. Also Flaubert, but that isn't important.] There are three files with
extension .PAS that are used to generate the executables -- they are little
more than a reference to all the files, statement of global variables, and
the main event loop. There are many files with extension .INC that contain
procedures called by the main event and each other; lots of code is shared.
As of version 0.92, CONVERT contains 1655 lines, EXAMINE 2811 lines, and
OFFLINE 2223 lines (as reported GET INFO from the Turbo IDE).
The code isn't very tightly written. In fact, I tend to just go off and
doodle for a while. That's the breaks. I think its reasonably legible,
however. If you have difficulty understanding the code, I'd be happy to
explain it to you -- see FEEDBACK below. Lots of people have asked about
the shortest path algorithm: its a very standard routine and can be found in
most introductory computer science texts dealing with directed graphs. I
did swipe the permutation generating routine (for the "visit multiple
sectors optimally") from B. R. Heap recursive routine. Everything else is
dead standard and not terribly inspired. And the who thing reeks of
creeping featuritis. It really should be rewritten from scratch, using an
oops toolbox in C++. And gosh, I could make it a windows program, and
desqview-aware, and... ;-)
So, that is the program at the moment. There are still lots of things I
want to add, but I make my living as a professor, not a programmer... this
is supposed to be fun, see? :-) Still, the program will probably make it to
version 1.0, so I can stop dealing with it, someday...
FEEDBACK
--------
WWIVnet: I run a BBS at 510-376-1554; leave mail to number 1. The board
is, in theory, open 24 hours a day, but it goes down a lot.
Since the board is at work, it occasionally stays down a couple of
days at a time. (It seems to know when I go on vacation...)
If you are part of a WWIVnet board, you can mail 1@5056.
Internet: I can be reached as woody@galileo.stmarys-ca.edu. I generally
read my email twice a day. The current version of the program is
also available by anonymous ftp from galileo.stmarys-ca.edu
(149.137.1.1) under /pub/tradewars, In fact, Richard Byron Ward has
been collecting a variety of trade wars utilities, and storing
them there. So you might find some utility you don't have there.
If you are a utility writer, I would be most happy to store your
work and make it available to the Internet.
Yes, I do consider suggestions. Sometimes the answer is "no". Sometimes it
works its way into the program. If you want your suggestion to almost
surely be included in the code, include a source patch! ;-)
ACKNOWLEDGEMENTS
----------------
Thanks, of course, to the Martins for such a great game!
COPYRIGHT AND LICENSING STUFF
-----------------------------
Copyright 1991, 1992 by Robert Weaver. All Rights Reserved. You may not
distribute this for any fee beyond the reasonable costs of distribution.
Permission is granted to distribute this document and the related
executables and source code provided this notice is preserved, and anyone
you give the executable has the ability to obtain this documentation and the
accompanying source files.